﻿using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApp1

//    在游戏中会出现很多种不同用途的 NPC，这些 NPC 有各自的存在的价值和作用，同时又具备一些共性的东西。
//在开发 NPC 系统的时候，往往是需要提取共性，独立出一个父类，然后子类继承实现不同作用的 NPC。
//分析：任务 NPC，商贩 NPC，铁匠 NPC，三种 NPC 的种类。
//共有属性：npc 的名字，npc 的类型；
//共有方法：都能和玩家交互(交谈)；

{
    //枚举
    public enum NPCType
    {
        //任务类型
        Task,
        //商贩类型
        Shop,
        //铁匠类型
        Tron

    }
    
    abstract  class NPC
    {
        private string name;
        private NPCType type;
        public string Name
        {
            get { return this.name; }
            set { this.name = value; }

        }
        public  NPCType Type
        {
            get { return this.type; }
            set { this.type = value; }
        }
        public NPC() { }

        public NPC(string name,NPCType type)
{
    this.name = name;
    this.type = type; 
}
        public override void Speak()
        {
            Console.WriteLine("碰到了大白！大白：杨洋，选择：1.是，已完成任务！ 2.否，继续任务！");
            int a = int.Parse(Console.ReadLine());
            switch (a)
            {
                case 1:
                    Console.WriteLine("正确的选择！请继续选择加强：1.强化自身修为阶级2.充满自身能量3.满血复活");
                    int b = int.Parse(Console.ReadLine());
                    switch (b)
                    {
                        case 1:
                            Console.WriteLine("买一身装备，为什么不选择黄金装备？\NPC：{0}，铁匠：{1}", this.Name, this.ironInfo);
                            break;
                        case 2:
                            Console.WriteLine("白银段位，兄弟你真不赖！NPC：{0}，铁匠：{1}", this.Name, this.ironInfo);
                            break;
                        case 3:
                            Console.WriteLine("恭喜恭喜，兄弟！你可以获得武林秘籍宝典：大保剑！\tNPC：{0}，铁匠：{1}", this.Name, this.ironInfo);
                            break;
                        default:
                            break;
                    }
                    break;
                case 2:
                    Console.WriteLine("游戏正在进行中！");
                    break;
                default:
                    break;
            }
        }
}
